/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import GUI.JPProveedorConsultar;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import javax.swing.JOptionPane;
import modelo.Proveedores;



/**
 *
 * @author DAM2B
 */
public class BaseDatosProveedor {

    private static Statement s = null;
    public static String modelo;

    private static Connection conexion;

    /**
     * Constructor vacío. Carga el driver de la base de datos y abre la
     * conexión.
     */
    public BaseDatosProveedor() throws ClassNotFoundException, SQLException {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conexion = DriverManager.getConnection("jdbc:mysql://localhost/sge", "root", "");
        } catch (ClassNotFoundException ex) {
//            System.err.println("ERROR. DBManager(). Error al cargar el driver JDBC de MYSQL");
            JOptionPane.showMessageDialog(null, "Error al cargar el driver JDBC de MySQL", "ERROR", JOptionPane.ERROR_MESSAGE);
            throw ex;
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null, "Error con la Base de datos. Comprueba que está iniciada.", "ERROR", JOptionPane.ERROR_MESSAGE);
//            System.err.println("ERROR. DBManager(). Error de SQL");
            throw ex;
        }
    }

    /**
     * Cierra la conexión con la base de datos.
     *
     * @throws java.sql.SQLException. Indica una error de SQL en el intento de
     * cierre de la conexión.
     */
    public void closeConnection() throws java.sql.SQLException {
        try {
            conexion.close();
        } catch (SQLException ex) {
            System.err.println("ERROR. DBManager.closeConnection(). Error al cerrar la conexion");
            throw ex;
        }
    }

    //Actulizado 3/03/15
    public ArrayList<Proveedores> getProveedores() throws java.sql.SQLException {
        ArrayList<Proveedores> alProveedores = new ArrayList();
        Proveedores p;
        try {
            java.sql.Statement s = conexion.createStatement();
            String sql = "select * from proveedor where codProveedor="+JPProveedorConsultar.CodProveedorSeleccionada+"";
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                p = new Proveedores(rs.getInt("codProveedor"), rs.getString("nombreProveedor"), rs.getString("cif"), rs.getString("direccion"), rs.getString("CP"), rs.getString("poblacion"), rs.getString("pais"));
                alProveedores.add(p);
            }
        } catch (SQLException ex) {
            System.err.println("ERROR. BBDD.getProveedores(). Error de SQL.");
            throw ex;
        }
        return alProveedores;
    }

    //Actulizado 3/03/15
    public void addProveedores(Proveedores pro) throws java.sql.SQLException {
        try {

            Statement s = conexion.createStatement();
            String sql1 = "INSERT INTO proveedor (codProveedor, nombreProveedor, cif, direccion, CP, poblacion, pais) VALUES  (" + pro.getCodigo_Proveedor() + ",'" + pro.getNombre_Proveedor() + "','" + pro.getCif() + "','" + pro.getDireccion() + "','" + pro.getcPostal() + "','" + pro.getPoblacion() + "','" + pro.getPais() + "')";
            System.out.println(sql1);
            s.executeUpdate(sql1);
        } catch (SQLException ex) {
            System.err.println("ERROR. DBManager.addCliente(). Error de SQL.");
            throw ex;
        }

    }
//Actualizado 3/03/15

    public void deleteProveedores(Proveedores p) throws SQLException {
        this.getProveedores();
        try {
            Statement s = conexion.createStatement();
            String sql = "delete from proveedor where codProveedor ='" + p.getCodigo_Proveedor()+ "'";
            System.out.println(sql);
            s.executeUpdate(sql);
        } catch (SQLException e) {
            System.err.println("Error conexion borrar proveedor");
            throw e;
        }
    }

    public ArrayList<String> getListaCodigoProve() throws SQLException {
        ArrayList<String> proveedor = new ArrayList<>();

        try {
            Statement s = conexion.createStatement();
            String sql = "select * from proveedor";
            ResultSet rs = s.executeQuery(sql);

            while (rs.next()) {
                proveedor.add(rs.getString("codProveedor"));
            }
            return proveedor;
        } catch (SQLException ex) {
            System.err.println("Error al devolver proveedor");
            throw ex;
        }
    }
    
    public int getCodProvedor(String codigoSeleccionado) throws Exception {

        int id = -1;
        try {
            Statement s = conexion.createStatement();
            String sql = "select codProveedor from proveedor where codProveedor=" + codigoSeleccionado + "";
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                id = rs.getInt("codProveedor");
            }
        } catch (Exception e) {
            System.err.println("Error conseguir id codProveedor");
            throw e;
        }
        return id;

    }

    public int getId(String nombre) throws Exception {

        int id = -1;
        try {
            Statement s = conexion.createStatement();
            String sql = "select codProveedor from proveedor where nombreProveedor='" + nombre + "'";
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                id = rs.getInt("codProveedor");
            }
        } catch (Exception e) {
            System.err.println("Error conseguir id getID");
            throw e;
        }
        return id;

    }

    public void updateProveedores(Proveedores p, String nuevaProveedores) throws SQLException {
        try {
            java.sql.Statement s = conexion.createStatement();
            String sql = "update proveedor set nombreProveedor=('" + nuevaProveedores + "') where nombreProveedor=('" + p.getNombre_Proveedor() + "')";

            System.out.println(sql);
            s.executeUpdate(sql);
        } catch (SQLException ex) {
            System.err.println("ERROR. BBDD.updateproveedores(). Error de SQL.");
            throw ex;
        }

    }

}
